/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tela.iptsp;

import ferramentas.Query;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.activation.UnsupportedDataTypeException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Lauro
 */
public class formularioIPTSP extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        try {

            SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
            String finalInscricoesString = "01/02/2012 00:00:00";
            Date finalInscricoes = formatter.parse(finalInscricoesString);
            Date agora = new Date();
            if (agora.after(finalInscricoes)) {
                throw new UnsupportedDataTypeException();
            } else {
                out.println("<html>");
                out.println("<head>");
                out.println("<title>Servlet formularioCurso</title>");
                out.println("</head>");
                out.println("<body>");

                String cpf = request.getParameter("cpf");
                cpf = cpf.replaceAll("\\.", "");
                cpf = cpf.replaceAll("-", "");

                Query q = new Query();

                boolean isCadastrado = false;
                if (!cpf.isEmpty()) {
                    isCadastrado = q.isUsuarioCadastradoIPTSP(cpf);
                }

                if (!isCadastrado) {

                    SimpleDateFormat formaterData = new SimpleDateFormat("dd/MM/yyyy");
                    SimpleDateFormat formaterMesAno = new SimpleDateFormat("MM/yyyy");

                    // == DADOS PESSOAIS
                    String nome = request.getParameter("nome");
                    String dataNascimento = request.getParameter("nascimento");

                    Date nascimento = null;
                    try {
                        nascimento = formaterData.parse(dataNascimento);
                    } catch (Exception ex) {
                        //System.out.println("Erro no preenchimento da Data:\n"+ex);
                        nascimento = new Date();
                    }

                    String rg = request.getParameter("rg");
                    String orgao_expedidor = request.getParameter("orgao_expedidor");


                    // == ENDEREÇO
                    String rua = request.getParameter("rua");
                    String complemento = request.getParameter("complemento");
                    String bairro = request.getParameter("bairro");
                    String cidade = request.getParameter("cidade");
                    String estado = request.getParameter("estado");
                    String cep = request.getParameter("cep");
                    cep = cep.replaceAll("-", "");

                    // == CONTATO
                    String telefone_residencial = request.getParameter("telefone_residencial");
                    String telefone_celular = request.getParameter("telefone_celular");
                    String email = request.getParameter("email");

                    // == POLO DE APOIO PRESENCIAL
                    String polo = request.getParameter("polo");

                    // == FORMAÇÃO

                    // GRADUAÇÃO
                    boolean graduacao = request.getParameter("graduacao") != null;
                    String graduacao_instituicao = null;
                    String graduacao_curso = null;
                    String dataGraduacao_inicio = null;
                    String dataGraduacao_conclusao = null;
                    Date graduacao_inicio = null;
                    Date graduacao_conclusao = null;
                    if (graduacao) {
                        graduacao_instituicao = request.getParameter("graduacao_instituicao");
                        graduacao_curso = request.getParameter("graduacao_curso");
                        dataGraduacao_inicio = request.getParameter("graduacao_inicio");
                        dataGraduacao_conclusao = request.getParameter("graduacao_conclusao");

                        if (!dataGraduacao_conclusao.isEmpty() && !dataGraduacao_inicio.isEmpty()) {
                            try {
                                graduacao_inicio = formaterMesAno.parse(dataGraduacao_inicio);
                                graduacao_conclusao = formaterMesAno.parse(dataGraduacao_conclusao);
                            } catch (Exception ex) {
                                //System.out.println("Erro no preenchimento da Data:\n"+ex);
                                graduacao_inicio = new Date();
                                graduacao_conclusao = new Date();
                            }
                        }
                    }

                    // PÓS-GRADUAÇÃO
                    boolean posgraduacao = request.getParameter("posgraduacao") != null;
                    String posgraduacao_instituicao = null;
                    String posgraduacao_curso = null;
                    String dataposgraduacao_inicio = null;
                    String dataposgraduacao_conclusao = null;
                    Date posgraduacao_inicio = null;
                    Date posgraduacao_conclusao = null;
                    if (posgraduacao) {
                        posgraduacao_instituicao = request.getParameter("posgraduacao_instituicao");
                        posgraduacao_curso = request.getParameter("posgraduacao_curso");
                        dataposgraduacao_inicio = request.getParameter("posgraduacao_inicio");
                        dataposgraduacao_conclusao = request.getParameter("posgraduacao_conclusao");

                        if (!dataposgraduacao_conclusao.isEmpty() && !dataposgraduacao_inicio.isEmpty()) {
                            try {
                                posgraduacao_inicio = formaterMesAno.parse(dataposgraduacao_inicio);
                                posgraduacao_conclusao = formaterMesAno.parse(dataposgraduacao_conclusao);
                            } catch (Exception ex) {
                                //System.out.println("Erro no preenchimento da Data:\n"+ex);
                                posgraduacao_inicio = new Date();
                                posgraduacao_conclusao = new Date();
                            }
                        }
                    }

                    // OUTRA
                    boolean outra = request.getParameter("outra") != null;
                    String outra_formacao = null;
                    String outra_instituicao = null;
                    String outra_curso = null;
                    String dataoutra_inicio = null;
                    String dataoutra_conclusao = null;
                    Date outra_inicio = null;
                    Date outra_conclusao = null;
                    if (outra) {
                        outra_formacao = request.getParameter("outra_formacao");
                        outra_instituicao = request.getParameter("outra_instituicao");
                        outra_curso = request.getParameter("outra_curso");
                        dataoutra_inicio = request.getParameter("outra_inicio");
                        dataoutra_conclusao = request.getParameter("outra_conclusao");

                        if (!dataoutra_conclusao.isEmpty() && !dataoutra_inicio.isEmpty()) {
                            try {
                                outra_inicio = formaterMesAno.parse(dataoutra_inicio);
                                outra_conclusao = formaterMesAno.parse(dataoutra_conclusao);
                            } catch (Exception ex) {
                                //System.out.println("Erro no preenchimento da Data:\n"+ex);
                                outra_inicio = new Date();
                                outra_conclusao = new Date();
                            }
                        }
                    }

                    // Aluno pos em algum polo
                    String polo_pos = null;
                    String tipo_curso = null;
                    if (request.getParameter("isaluno_pos_polo") != null) {
                        polo_pos = request.getParameter("polo_pos");
                        tipo_curso = request.getParameter("tipo_curso");
                    }

                    // Carga horária em outros cursos
                    int ch_16_40 = 0;
                    int ch_41_80 = 0;
                    int ch_81_120 = 0;
                    int ch_mais_120 = 0;
                    int c_informatica = 0;
                    try {
                        ch_16_40 = Integer.parseInt(request.getParameter("ch_16_40"));
                    } catch (NumberFormatException ex) {
                        ch_16_40 = 0;
                    }
                    try {
                        ch_41_80 = Integer.parseInt(request.getParameter("ch_41_80"));
                    } catch (NumberFormatException ex) {
                        ch_41_80 = 0;
                    }
                    try {
                        ch_81_120 = Integer.parseInt(request.getParameter("ch_81_120"));
                    } catch (NumberFormatException ex) {
                        ch_81_120 = 0;
                    }
                    try {
                        ch_mais_120 = Integer.parseInt(request.getParameter("ch_mais_120"));
                    } catch (NumberFormatException ex) {
                        ch_mais_120 = 0;
                    }
                    try {
                        c_informatica = Integer.parseInt(request.getParameter("c_informatica"));
                    } catch (NumberFormatException ex) {
                        c_informatica = 0;
                    }


                    // == ATUAÇÃO
                    String atuacao_instituicao = request.getParameter("atuacao_instituicao");
                    String atuacao_area = request.getParameter("atuacao_area");
                    String dataAtuacao_periodo_inicio = request.getParameter("atuacao_periodo_inicio");


                    Date atuacao_periodo_inicio = null;
                    Date atuacao_periodo_fim = null;

                    if (!dataAtuacao_periodo_inicio.isEmpty()) {
                        try {
                            atuacao_periodo_inicio = formaterMesAno.parse(dataAtuacao_periodo_inicio);

                        } catch (Exception ex) {
                            //System.out.println("Erro no preenchimento da Data:\n"+ex);
                            atuacao_periodo_inicio = new Date();

                        }
                    }

                    // SUS
                    String esfera_sus = null;
                    String vinculo_sus = null;
                    esfera_sus = request.getParameter("esfera_sus");
                    vinculo_sus = request.getParameter("vinculo_sus");

                    // OUTROS
                    boolean outros1 = request.getParameter("outros1") != null;
                    boolean outros2 = request.getParameter("outros2") != null;
                    boolean outros3 = request.getParameter("outros3") != null;
                    boolean outros4 = request.getParameter("outros4") != null;
                    boolean outros5 = request.getParameter("outros5") != null;
                    boolean outros6 = request.getParameter("outros6") != null;

                    // ÁREA DE ÊNFASE DOS TRABALHOS TRANSVERSAIS
                    boolean aett1 = request.getParameter("aett1") != null;
                    boolean aett2 = request.getParameter("aett2") != null;
                    boolean aett3 = request.getParameter("aett3") != null;
                    boolean aett4 = request.getParameter("aett4") != null;
                    boolean aett5 = request.getParameter("aett5") != null;

                    q.cadastraIPTSP(nome, nascimento, rg, orgao_expedidor, cpf, rua, complemento, bairro, cidade, estado, cep, telefone_residencial, telefone_celular, email, polo,
                            graduacao, graduacao_instituicao, graduacao_curso, graduacao_inicio, graduacao_conclusao, posgraduacao, posgraduacao_instituicao, posgraduacao_curso,
                            posgraduacao_inicio, posgraduacao_conclusao, outra, outra_formacao, outra_instituicao, outra_curso, outra_inicio, outra_conclusao, polo_pos, tipo_curso,
                            ch_16_40, ch_41_80, ch_81_120, ch_mais_120, c_informatica, atuacao_instituicao, atuacao_area, atuacao_periodo_inicio, atuacao_periodo_fim, esfera_sus,
                            vinculo_sus, outros1, outros2, outros3, outros4, outros5, outros6, aett1, aett2, aett3, aett4, aett5);

                    out.println("<script type='application/javascript' language='javascript'>");
                    out.println("window.alert('Cadastrado com sucesso!');");
                    out.println("window.location ='http://www.ciar.ufg.br';");
                    out.println("</script>");
                } else {
                    out.println("<script type='application/javascript' language='javascript'>");
                    out.println("window.alert('Usuário já cadastrado!');");
                    out.println("window.location ='http://www.ciar.ufg.br';");
                    out.println("</script>");
                }
            }
        } catch (UnsupportedDataTypeException ex) {
            out.println("Não é mais possível se inscrever nesse curso! <a href='http://www.iptsp.ufg.br/geoprocessamento/'> Voltar à página do curso.</a>");
            System.out.println(ex);
            out.println("<script>");
            out.println("window.alert('Não é mais possível se inscrever nesse curso!');");
            out.println("self.location ='http://www.iptsp.ufg.br/geoprocessamento';");
            out.println("</script>");
        } catch (Exception ex) {
            out.println("<script type='application/javascript' language='javascript'>");
            out.println("window.alert('Erro ao cadastrar! Entre em contato com Suporte para tentar resolver o seu problema.');");
            out.println("window.location ='http://www.ciar.ufg.br';");
            out.println("</script>");
        } finally {
            out.println("</body>");
            out.println("</html>");
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
